Version | ID |
---|---|
1.8.X | 0x21 |
1.9 | 0x20 |
1.13.1 | 0x22 |
1.14.4 | 0x21 |
1.15.2 | 0x22 |
1.16 | 0x22 0x21 |
1.16.2 | 0x22 0x20 |
Packet ID | State | Bound To | Field Name | Field Type | Notes |
---|---|---|---|---|---|
Play | Client | Chunk X | Int | Chunk coordinate (block coordinate divided by 16, rounded down) | |
Chunk Z | Int | Chunk coordinate (block coordinate divided by 16, rounded down) | |||
Full chunk | Boolean | See Chunk Format | |||
Primary Bit Mask | VarInt | Bitmask with bits set to 1 for every 16×16×16 chunk section whose data is included in Data. The least significant bit represents the chunk section at the bottom of the chunk column (from y=0 to y=15). | |||
Heightmaps | NBT | Compound containing one long array named MOTION_BLOCKING , which is a heightmap for the highest solid block at each position in the chunk (as a compacted long array with 256 entries at 9 bits per entry totaling 36 longs). The Notchian server also adds a WORLD_SURFACE long array, the purpose of which is unknown, but it's not required for the chunk to be accepted. |
|||
Biomes length | Optional VarInt | Size of the following array. Not present if full chunk is false. | |||
Biomes | Optional array of |
||||
Size | VarInt | Size of Data in bytes | |||
Data | Byte array | See data structure in Chunk Format | |||
Number of block entities | VarInt | Number of elements in the following array | |||
Block entities | Array of NBT Tag | All block entities in the chunk. Use the x, y, and z tags in the NBT to determine their positions. |
Packet ID | State | Bound To | Field Name | Field Type | Notes |
---|---|---|---|---|---|
Play | Client | Chunk X | Int | Chunk coordinate (block coordinate divided by 16, rounded down) | |
Chunk Z | Int | Chunk coordinate (block coordinate divided by 16, rounded down) | |||
Full chunk | Boolean | See Chunk Format | |||
Ignore old data | Boolean | If false, the client will recalculate lighting based on the old/new chunk data | |||
Primary Bit Mask | VarInt | Bitmask with bits set to 1 for every 16×16×16 chunk section whose data is included in Data. The least significant bit represents the chunk section at the bottom of the chunk column (from y=0 to y=15). | |||
Heightmaps | NBT | Compound containing one long array named MOTION_BLOCKING , which is a heightmap for the highest solid block at each position in the chunk (as a compacted long array with 256 entries at 9 bits per entry totaling 36 longs). The Notchian server also adds a WORLD_SURFACE long array, the purpose of which is unknown, but it's not required for the chunk to be accepted. |
|||
Biomes | Optional array of Integer | 1024 biome IDs, ordered by x then z then y, in 4×4×4 blocks. Not present if full chunk is false. | |||
Size | VarInt | Size of Data in bytes | |||
Data | Byte array | See data structure in Chunk Format | |||
Number of block entities | VarInt | Number of elements in the following array | |||
Block entities | Array of NBT Tag | All block entities in the chunk. Use the x, y, and z tags in the NBT to determine their positions. |
Packet ID | State | Bound To | Field Name | Field Type | Notes |
---|---|---|---|---|---|
0x22 | Play | Client | Chunk X | Int | Chunk coordinate (block coordinate divided by 16, rounded down) |
Chunk Z | Int | Chunk coordinate (block coordinate divided by 16, rounded down) | |||
Full chunk | Boolean | See Chunk Format | |||
Primary Bit Mask | VarInt | Bitmask with bits set to 1 for every 16×16×16 chunk section whose data is included in Data. The least significant bit represents the chunk section at the bottom of the chunk column (from y=0 to y=15). | |||
Heightmaps | NBT | Compound containing one long array named MOTION_BLOCKING , which is a heightmap for the highest solid block at each position in the chunk (as a compacted long array with 256 entries at 9 bits per entry totaling 36 longs). The Notchian server also adds a WORLD_SURFACE long array, the purpose of which is unknown, but it's not required for the chunk to be accepted. |
|||
Biomes | Optional array of Integer | 1024 biome IDs, ordered by x then z then y, in 4×4×4 blocks. Not present if full chunk is false. | |||
Size | VarInt | Size of Data in bytes | |||
Data | Byte array | See data structure in Chunk Format | |||
Number of block entities | VarInt | Number of elements in the following array | |||
Block entities | Array of NBT Tag | All block entities in the chunk. Use the x, y, and z tags in the NBT to determine their positions. |
Packet ID | State | Bound To | Field Name | Field Type | Notes |
---|---|---|---|---|---|
0x21 | Play | Client | Chunk X | Int | Chunk coordinate (block coordinate divided by 16, rounded down) |
Chunk Z | Int | Chunk coordinate (block coordinate divided by 16, rounded down) | |||
Full chunk | Boolean | See Chunk Format | |||
Primary Bit Mask | VarInt | Bitmask with bits set to 1 for every 16×16×16 chunk section whose data is included in Data. The least significant bit represents the chunk section at the bottom of the chunk column (from y=0 to y=15). | |||
Heightmaps | NBT | Compound containing one long array named MOTION_BLOCKING , which is a heightmap for the highest solid block at each position in the chunk (as a compacted long array with 256 entries at 9 bits per entry totaling 36 longs). The Notchian server also adds a WORLD_SURFACE long array, the purpose of which is unknown, but it's not required for the chunk to be accepted. |
|||
Size | VarInt | Size of Data in bytes | |||
Data | Byte array | See data structure in Chunk Format | |||
Number of block entities | VarInt | Number of elements in the following array | |||
Block entities | Array of NBT Tag | All block entities in the chunk. Use the x, y, and z tags in the NBT to determine their positions. |
Packet ID | State | Bound To | Field Name | Field Type | Notes |
---|---|---|---|---|---|
0x22 | Play | Client | Chunk X | Int | Chunk coordinate (block coordinate divided by 16, rounded down) |
Chunk Z | Int | Chunk coordinate (block coordinate divided by 16, rounded down) | |||
Full chunk | Boolean | See Chunk Format | |||
Primary Bit Mask | VarInt | Bitmask with bits set to 1 for every 16×16×16 chunk section whose data is included in Data. The least significant bit represents the chunk section at the bottom of the chunk column (from y=0 to y=15). | |||
Size | VarInt | Size of Data in bytes | |||
Data | Byte array | See data structure in Chunk Format | |||
Number of block entities | VarInt | Number of elements in the following array | |||
Block entities | Array of NBT Tag | All block entities in the chunk. Use the x, y, and z tags in the NBT to determine their positions. |
Packet ID | State | Bound To | Field Name | Field Type | Notes |
---|---|---|---|---|---|
0x22 | Play | Client | Chunk X | Int | Chunk coordinate (block coordinate divided by 16, rounded down) |
Chunk Z | Int | Chunk coordinate (block coordinate divided by 16, rounded down) | |||
Ground-Up Continuous | Boolean | See Chunk Format | |||
Primary Bit Mask | VarInt | Bitmask with bits set to 1 for every 16×16×16 chunk section whose data is included in Data. The least significant bit represents the chunk section at the bottom of the chunk column (from y=0 to y=15). | |||
Size | VarInt | Size of Data in bytes | |||
Data | Byte array | See data structure in Chunk Format | |||
Number of block entities | VarInt | Number of elements in the following array | |||
Block entities | Array of NBT Tag | All block entities in the chunk. Use the x, y, and z tags in the NBT to determine their positions. |
Packet ID | State | Bound To | Field Name | Field Type | Notes |
---|---|---|---|---|---|
0x20 | Play | Client | Chunk X | Int | Chunk coordinate (block coordinate divided by 16, rounded down) |
Chunk Z | Int | Chunk coordinate (block coordinate divided by 16, rounded down) | |||
Ground-Up Continuous | Boolean | See Chunk Format | |||
Primary Bit Mask | VarInt | Bitmask with bits set to 1 for every 16×16×16 chunk section whose data is included in Data. The least significant bit represents the chunk section at the bottom of the chunk column (from y=0 to y=15). | |||
Size | VarInt | Size of Data in bytes | |||
Data | Byte array | See data structure in Chunk Format | |||
Number of block entities | VarInt | Number of elements in the following array | |||
Block entities | Array of NBT Tag | All block entities in the chunk. Use the x, y, and z tags in the NBT to determine their positions. |
Packet ID | State | Bound To | Field Name | Field Type | Notes |
---|---|---|---|---|---|
0x20 | Play | Client | Chunk X | Int | Chunk coordinate (block coordinate divided by 16, rounded down) |
Chunk Z | Int | Chunk coordinate (block coordinate divided by 16, rounded down) | |||
Ground-Up Continuous | Boolean | See Chunk Format | |||
Primary Bit Mask | VarInt | Bitmask with bits set to 1 for every 16×16×16 chunk section whose data is included in Data. The least significant bit represents the chunk section at the bottom of the chunk column (from y=0 to y=15). | |||
Size | VarInt | Size of Data in bytes | |||
Data | Byte array | See data structure in Chunk Format | |||
Number of block entities | VarInt | Length of the following array | |||
Block entities | Array of NBT Tag | All block entities in the chunk. Use the x, y, and z tags in the NBT to determine their positions. |
Packet ID | State | Bound To | Field Name | Field Type | Notes |
---|---|---|---|---|---|
0x20 | Play | Client | Chunk X | Int | Chunk coordinate (block coordinate divided by 16, rounded down) |
Chunk Z | Int | Chunk coordinate (block coordinate divided by 16, rounded down) | |||
Ground-Up Continuous | Boolean | See Chunk Format | |||
Primary Bit Mask | VarInt | Bitmask with bits set to 1 for every 16×16×16 chunk section whose data is included in Data. The least significant bit represents the chunk section at the bottom of the chunk column (from y=0 to y=15). | |||
Size | VarInt | Size of Data in bytes | |||
Data | Byte array | See data structure in Chunk Format | |||
Number of block entities | VarInt | Length of the following array | |||
Block entities | Array of NBT Tag | All block entities in the chunk. Use the x, y, and z tags in the NBT to determine their positions. |
Packet ID | State | Bound To | Field Name | Field Type | Notes |
---|---|---|---|---|---|
0x20 | Play | Client | Chunk X | Int | Block coordinate divided by 16, rounded down |
Chunk Z | Int | Block coordinate divided by 16, rounded down | |||
Ground-Up Continuous | Boolean | This is true if the packet represents all chunk sections in this vertical chunk column, where the Primary Bit Mask specifies exactly which chunk sections are included, and which are air. | |||
Primary Bit Mask | VarInt | Bitmask with bits set to 1 for every 16×16×16 chunk section whose data is included in Data. The least significant bit represents the chunk section at the bottom of the chunk column (from y=0 to y=15). | |||
Size | VarInt | Size of Data in bytes, plus size of Biomes in bytes if present | |||
Data | Array of Chunk Section | The length of the array is equal to the number of bits set in Primary Bit Mask. Chunks are sent bottom-to-top, i.e. the first chunk, if sent, extends from Y=0 to Y=15. | |||
Biomes | Optional Byte Array | Only if Ground-Up Continuous: biome array, byte per XZ coordinate, 256 bytes total. | |||
Number of block entities | VarInt | Length of the following array | |||
Block entities | Array of NBT Tag | All block entities in the chunk. Use the x, y, and z tags in the NBT to determine their positions. |
Packet ID | State | Bound To | Field Name | Field Type | Notes |
---|---|---|---|---|---|
0x20 | Play | Client | Chunk X | Int | Block coordinate divided by 16, rounded down |
Chunk Z | Int | Block coordinate divided by 16, rounded down | |||
Ground-Up Continuous | Boolean | This is true if the packet represents all chunk sections in this vertical chunk column, where the Primary Bit Mask specifies exactly which chunk sections are included, and which are air. | |||
Primary Bit Mask | VarInt | Bitmask with bits set to 1 for every 16×16×16 chunk section whose data is included in Data. The least significant bit represents the chunk section at the bottom of the chunk column (from y=0 to y=15). | |||
Size | VarInt | Size of Data in bytes, plus size of Biomes in bytes if present | |||
Data | Array of Chunk Section | The length of the array is equal to the number of bits set in Primary Bit Mask. Chunks are sent bottom-to-top, i.e. the first chunk, if sent, extends from Y=0 to Y=15. | |||
Biomes | Optional Byte Array | Only if Ground-Up Continuous: biome array, byte per XZ coordinate, 256 bytes total. | |||
Number of block entities | VarInt | Length of the following array | |||
Block entities | Array of NBT Tag | All block entities in the chunk. Use the x, y, and z tags in the NBT to determine their positions. |
Packet ID | State | Bound To | Field Name | Field Type | Notes |
---|---|---|---|---|---|
0x20 | Play | Client | Chunk X | Int | Block coordinate divided by 16, rounded down |
Chunk Z | Int | Block coordinate divided by 16, rounded down | |||
Ground-Up Continuous | Boolean | This is true if the packet represents all chunk sections in this vertical chunk column, where the Primary Bit Mask specifies exactly which chunk sections are included, and which are air. | |||
Primary Bit Mask | VarInt | Bitmask with bits set to 1 for every 16×16×16 chunk section whose data is included in Data. The least significant bit represents the chunk section at the bottom of the chunk column (from y=0 to y=15). | |||
Size | VarInt | Size of Data in bytes, plus size of Biomes in bytes if present | |||
Data | Array of Chunk Section | The length of the array is equal to the number of bits set in Primary Bit Mask. Chunks are sent bottom-to-top, i.e. the first chunk, if sent, extends from Y=0 to Y=15. | |||
Biomes | Optional Byte Array | Only if Ground-Up Continuous: biome array, byte per XZ coordinate, 256 bytes total. | |||
Number of block entities | VarInt | Length of the following array | |||
Block entities | Array of NBT Tag | All block entities in the chunk. Use the x, y, and z tags in the NBT to determine their positions. |
Packet ID | State | Bound To | Field Name | Field Type | Notes |
---|---|---|---|---|---|
0x20 | Play | Client | Chunk X | Int | Block coordinate divided by 16, rounded down |
Chunk Z | Int | Block coordinate divided by 16, rounded down | |||
Ground-Up Continuous | Boolean | This is true if the packet represents all chunk sections in this vertical chunk column, where the Primary Bit Mask specifies exactly which chunk sections are included, and which are air. | |||
Primary Bit Mask | VarInt | Bitmask with bits set to 1 for every 16×16×16 chunk section whose data is included in Data. The least significant bit represents the chunk section at the bottom of the chunk column (from y=0 to y=15). | |||
Size | VarInt | Size of Data in bytes, plus size of Biomes in bytes if present | |||
Data | Array of Chunk Section | The length of the array is equal to the number of bits set in Primary Bit Mask. Chunks are sent bottom-to-top, i.e. the first chunk, if sent, extends from Y=0 to Y=15. | |||
Biomes | Optional Byte Array | Only if Ground-Up Continuous: biome array, byte per XZ coordinate, 256 bytes total. | |||
Number of block entities | VarInt | Length of the following array | |||
Block entities | Array of NBT Tag | All block entities in the chunk. Use the x, y, and z tags in the NBT to determine their positions. |
Packet ID | State | Bound To | Field Name | Field Type | Notes |
---|---|---|---|---|---|
0x20 | Play | Client | Chunk X | Int | Block coordinate divided by 16, rounded down |
Chunk Z | Int | Block coordinate divided by 16, rounded down | |||
Ground-Up Continuous | Boolean | This is true if the packet represents all chunk sections in this vertical chunk column, where the Primary Bit Mask specifies exactly which chunk sections are included, and which are air. | |||
Primary Bit Mask | VarInt | Bitmask with bits set to 1 for every 16×16×16 chunk section whose data is included in Data. The least significant bit represents the chunk section at the bottom of the chunk column (from y=0 to y=15). | |||
Size | VarInt | Size of Data in bytes, plus size of Biomes in bytes if present | |||
Data | Array of Chunk Section | The length of the array is equal to the number of bits set in Primary Bit Mask. Chunks are sent bottom-to-top, i.e. the first chunk, if sent, extends from Y=0 to Y=15. | |||
Biomes | Optional Byte Array | Only if Ground-Up Continuous: biome array, byte per XZ coordinate, 256 bytes total. | |||
Number of block entities | VarInt | Length of the following array | |||
Block entities | Array of NBT Tag | All block entities in the chunk. Use the x, y, and z tags in the NBT to determine their positions. |
Packet ID | State | Bound To | Field Name | Field Type | Notes |
---|---|---|---|---|---|
0x20 | Play | Client | Chunk X | Int | Block coordinate divided by 16, rounded down |
Chunk Z | Int | Block coordinate divided by 16, rounded down | |||
Ground-Up Continuous | Boolean | This is true if the packet represents all chunk sections in this vertical chunk column, where the Primary Bit Mask specifies exactly which chunk sections are included, and which are air. | |||
Primary Bit Mask | VarInt | Bitmask with bits set to 1 for every 16×16×16 chunk section whose data is included in Data. The least significant bit represents the chunk section at the bottom of the chunk column (from y=0 to y=15). | |||
Size | VarInt | Size of Data in bytes, plus size of Biomes in bytes if present | |||
Data | Array of Chunk Section | The length of the array is equal to the number of bits set in Primary Bit Mask. Chunks are sent bottom-to-top, i.e. the first chunk, if sent, extends from Y=0 to Y=15. | |||
Biomes | Optional Byte Array | Only if Ground-Up Continuous: biome array, byte per XZ coordinate, 256 bytes total. |
Packet ID | State | Bound To | Field Name | Field Type | Notes |
---|---|---|---|---|---|
0x20 | Play | Client | Chunk X | Int | Block coordinate divided by 16, rounded down |
Chunk Z | Int | Block coordinate divided by 16, rounded down | |||
Ground-Up Continuous | Boolean | This is true if the packet represents all chunk sections in this vertical chunk column, where the Primary Bit Mask specifies exactly which chunk sections are included, and which are air. | |||
Primary Bit Mask | VarInt | Bitmask with bits set to 1 for every 16×16×16 chunk section whose data is included in Data. The least significant bit represents the chunk section at the bottom of the chunk column (from y=0 to y=15). | |||
Size | VarInt | Size of Data in bytes, plus size of Biomes in bytes if present | |||
Data | Array of Chunk Section | The length of the array is equal to the number of bits set in Primary Bit Mask. Chunks are sent bottom-to-top, i.e. the first chunk, if sent, extends from Y=0 to Y=15. | |||
Biomes | Optional Byte Array | Only if Ground-Up Continuous: biome array, byte per XZ coordinate, 256 bytes total. |
Packet ID | State | Bound To | Field Name | Field Type | Notes |
---|---|---|---|---|---|
0x21 | Play | Client | Chunk X | Int | Chunk X coordinate |
Chunk Z | Int | Chunk Z coordinate | |||
Ground-Up Continuous | Boolean | This is true if the packet represents all sections in this vertical column, where the Primary Bit Mask specifies exactly which sections are included, and which are air | |||
Primary Bit Mask | Unsigned Short | Bitmask with 1 for every 16x16x16 section whose data follows in the compressed data | |||
Size | VarInt | Size of Data | |||
Data | Chunk |